<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="../css/style.css" type="text/css" media="screen">
</head>
<body>
    <div class="entry"> 
 <div id="toc">
  <strong>目录</strong>
  <span>[hide]</span> 
  <ul id="toc_l"> 
   <li><a href="#Constant_declaration">预定义常量</a> </li> 
   <li><a href="#Controlling_compilation">编译控制 </a></li> 
   <li><a href="#Including_of_files">文件包含 </a></li> 
   <li><a href="#Importing_of_functions">函数导入 </a></li> 
  </ul>
 </div> 
 <p>预处理程序是MQL4编译程序的一个特殊的组成部分，用于在程序被编译之前预先准备好程序源码。</p> 
 <p>预处理程序能增强程序源码的可读性。在MQL4程序中，通过包含指定的文件可以获得结构化源码，给常量取一个易于记忆的名字有助于增强源码的可读性。</p> 
 <p>预处理程序也允许MQL4程序定义特定的参数。</p> 
 <p>如果#号置于程序的第一行，那么该行就是预处理程序的控制指令。预处理程序指令以回车换行结束。</p> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="Constant_declaration"></a>预定义常量</h2> 
 <p>使用 #define 命令，我们可以在程序中定义符号名或符号常量代表特定的字符串。随后，编译程序会把所有符号名替换成相应的字符串。事实上，这些名称可以被任意的文本替换，并不局限于数字:</p> 
 <pre><i>#define identifier value</i></pre> 
 <p>常量符号名同样遵守变量名的命名规则，值可以是以下任意类型:</p> 
 <pre class="brush: mql4; toolbar: false;">#define ABC          100
#define PI           0.314
#define COMPANY_NAME "myEAtrade Inc."
...
void ShowCopyright()
  {
   Print("版权所有 © 2001-2007, ",COMPANY_NAME);
   Print("http://www.myeatrade.com");
  }</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="Controlling_compilation"></a>编译控制</h2> 
 <p>每个MQL4程序允许指定额外的特定参数，这些参数用#property命名，它不需要用户明确地启动程序，就可帮助客户端提供合适的服务。要注意的是，这个功能还与技术指标的外部设定有关。</p> 
 <pre><i>#property 识别值</i></pre> 
 <table class="custom-table"> 
  <thead> 
   <tr> 
    <th width="15%">常数</th> 
    <th width="10%">类型</th> 
    <th width="75%">描述</th> 
   </tr> 
  </thead> 
  <tbody> 
   <tr> 
    <td>link</td> 
    <td>string</td> 
    <td>公司网站的相关连接</td> 
   </tr> 
   <tr> 
    <td>copyright</td> 
    <td>string</td> 
    <td>公司名称</td> 
   </tr> 
   <tr> 
    <td>stacksize</td> 
    <td>int</td> 
    <td>堆栈大小</td> 
   </tr> 
   <tr> 
    <td>library</td> 
    <td>&nbsp;</td> 
    <td>库</td> 
   </tr> 
   <tr> 
    <td>indicator_chart_window</td> 
    <td>void</td> 
    <td>在图表窗口显示指标</td> 
   </tr> 
   <tr> 
    <td>indicator_separate_window</td> 
    <td>void</td> 
    <td>在独立显示窗口显示指标</td> 
   </tr> 
   <tr> 
    <td>indicator_buffers</td> 
    <td>int</td> 
    <td>计算指标的缓冲区个数，最大为8</td> 
   </tr> 
   <tr> 
    <td>indicator_minimum</td> 
    <td>double</td> 
    <td>独立显示的指标窗口下端缩放比例</td> 
   </tr> 
   <tr> 
    <td>indicator_maximum</td> 
    <td>double</td> 
    <td>独立显示的指标窗口上端缩放比例</td> 
   </tr> 
   <tr> 
    <td>indicator_colorN</td> 
    <td>color</td> 
    <td>线1到线8的显示颜色</td> 
   </tr> 
   <tr> 
    <td>indicator_widthN</td> 
    <td>int</td> 
    <td>线1到线8的显示宽度</td> 
   </tr> 
   <tr> 
    <td>indicator_styleN</td> 
    <td>int</td> 
    <td>线1到线8的显示样式</td> 
   </tr> 
   <tr> 
    <td>indicator_levelN</td> 
    <td>double</td> 
    <td>自定义指标的第N条水平线(N为1到8)</td> 
   </tr> 
   <tr> 
    <td>indicator_levelcolor</td> 
    <td>color</td> 
    <td>自定义指标的第N条水平线颜色(N为1到8)</td> 
   </tr> 
   <tr> 
    <td>indicator_levelwidth</td> 
    <td>int</td> 
    <td>自定义指标的第N条水平线宽度(N为1到8)</td> 
   </tr> 
   <tr> 
    <td>indicator_levelstyle</td> 
    <td>int</td> 
    <td>自定义指标的第N条水平线样式(N为1到8)</td> 
   </tr> 
   <tr> 
    <td>show_confirm</td> 
    <td>void</td> 
    <td>在脚本运行之前显示确认框</td> 
   </tr> 
   <tr> 
    <td>show_inputs</td> 
    <td>void</td> 
    <td>在脚本运行之前显示它的属性表；禁用show_confirm属性</td> 
   </tr> 
  </tbody> 
 </table> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">#property link        "http://www.myeatrade.com"
#property copyright   "myEAtrade Inc."
#property library
#property stacksize   1024</pre> 
 <p>在所执行模块的设置中，编译程序将会保存这些已说明的值。</p> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="Including_of_files"></a>文件包含</h2> 
 <p>#include 命令行可以放置在程序的任意部分，但是所有的“文件包含”通常都被统一放置在源代码的开头。调用格式:</p> 
 <pre><i>#include &lt;file_name&gt;
#include "file_name";</i></pre> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">#include &lt;WinUser32.mqh&gt;
#include "mylib.mqh"</pre> 
 <p>预处理程序将用WinUser32.mgh文件内容替换这一行。尖括号表示WinUser32.mqh文件将会从默认目录调用(通常默认目录为terminal_ directory\experts\include)。不会搜索当前目录。</p> 
 <p>如果文件名用引号括起来，将在当前目录中搜索该文件(源码主文件所在位置)。不会搜索标准目录。</p> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="Importing_of_functions"></a>函数导入</h2> 
 <p>函数可从MQL4编译过的模块(*.EX4文件)和操作系统文件模块(*.DLL文件)导入过来。模块名需要在#import指令中指定。因为编译程序能够以适当的方式生成被导入的函数调用和传递参数，函数的完整说明是必需的。函数说明要紧跟在 #import "module name” 命令后而，以新的#import命令(不带参数)结束导入函数说明块。</p> 
 <pre><i>#import "file_name"
    func1 define;
    func2 define;
    ...
    funcN define;
#import</i></pre> 
 <p>导入函数必须有唯一的名称。相同名称的函数无法从不同的模块同时导入。导入的函数名称不能与那些内置函数冲突。</p> 
 <p>由于导入函数是在模块之外编译的，编译程序无法检查参数传递的正确性。这就是为什么，为了避免运行时错误，有必要精确地说明参数类型定义和参数顺序的原因。传递到导入函数(从EX 和从DLL模块)的这些参数不能通过默认值获得值。</p> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">#import "user32.dll"
   int    MessageBoxA(int hWnd, string lpText, string lpCaption, int uType);
#import "stdlib.ex4"
   string ErrorDescription(int error_code);
   int    RGB(int red_value, int green_value, int blue_value);
   bool   CompareDoubles(double number1, double number2);
   string DoubleToStrMorePrecision(double number, int precision);
   string IntegerToHexString(int integer_number);
#import "Expert示例.dll"
   int    GetIntValue(int);
   double GetDoubleValue(double);
   string GetStringValue(string);
   double GetArrayItemValue(double arr[], int, int);
   bool   SetArrayItemValue(double&amp; arr[], int,int, double);
   double GetRatesItemValue(double rates[][6], int, int, int);
   int    SortStringArray(string&amp; arr[], int);
   int    ProcessStringArray(string&amp; arr[], int);
#import</pre> 
 <p>对于在MQL4程序执行期间导入的函数，采用了所谓的“后期联编”。这就意味着只要导入的函数未被调用，相应的模块(EX4或DLL)就不会被加载。</p> 
 <p>不推荐使用全路径文件名Drive:\Directory\FileName.Ext加载模块。MQL4库会从<em>terminal_dir\experts\libraries</em>文件夹中载入进来。如果没有找到库，就会尝试从<em>terminal_dir\experts</em>文件夹中加载。</p> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 本文地址：
 <a href="373.html" rel="bookmark"><b>373.html</b></a> 
</div>
</body>
</html>